#!/bin/bash

# 最终修复方案 - 解决cjpm test卡住问题
echo "🚀 Yao Framework 最终修复方案"
echo "============================="

cd "$(dirname "$0")/.."

echo "📝 问题分析:"
echo "  - 仓颉运行时GC的STW超时问题"
echo "  - 线程同步导致测试进程无法正常退出"
echo "  - 需要优化GC参数和测试策略"

echo ""
echo "🔧 应用修复措施:"

# 1. 创建GC优化的环境配置文件
cat > .env.gc << 'EOF'
# Yao Framework GC优化配置
export CANGJIE_GC_HEAP_SIZE=256m
export CANGJIE_GC_MAX_HEAP_SIZE=512m
export CANGJIE_GC_CONCURRENT=true
export CANGJIE_GC_PARALLEL=true
export CANGJIE_GC_STW_TIMEOUT=15000
export CANGJIE_TEST_THREADS=1
export CANGJIE_GC_THREADS=2
export CANGJIE_STACK_SIZE=2m
EOF

echo "✅ 1. 创建GC优化配置文件 (.env.gc)"

# 2. 创建安全的测试执行器
cat > scripts/safe_test.sh << 'EOF'
#!/bin/bash
# 安全的测试执行器

cd "$(dirname "$0")/.."

# 加载GC优化配置
if [ -f .env.gc ]; then
    source .env.gc
    echo "✅ 已加载GC优化配置"
else
    echo "⚠️ 未找到GC配置文件，使用默认参数"
    export CANGJIE_GC_HEAP_SIZE=256m
    export CANGJIE_GC_MAX_HEAP_SIZE=512m
    export CANGJIE_GC_STW_TIMEOUT=15000
fi

# 显示当前配置
echo "📊 当前GC配置:"
echo "  堆大小: ${CANGJIE_GC_HEAP_SIZE:-默认}"
echo "  最大堆: ${CANGJIE_GC_MAX_HEAP_SIZE:-默认}"
echo "  STW超时: ${CANGJIE_GC_STW_TIMEOUT:-默认}ms"

# 构建项目
echo ""
echo "🔨 构建项目..."
if ! cjpm build; then
    echo "❌ 构建失败"
    exit 1
fi

# 根据参数选择测试策略
case "${1:-minimal}" in
    "minimal")
        echo ""
        echo "🧪 运行最小化测试..."
        echo "这是最安全的测试，用于验证基础功能"
        cjpm test --filter MinimalDiagnosticTest
        ;;
    "memory")
        echo ""
        echo "🧪 运行内存测试..."
        cjpm test --filter MemoryDiagnosticTest
        ;;
    "gc")
        echo ""
        echo "🧪 运行GC测试..."
        cjpm test --filter GCFriendlyTest
        ;;
    "all")
        echo ""
        echo "🧪 运行完整测试..."
        echo "⚠️ 注意：如果卡住，请按Ctrl+C终止"
        cjpm test
        ;;
    "batch")
        echo ""
        echo "🧪 运行分批测试..."
        echo "这是推荐的测试策略，避免GC问题"
        
        echo "1/3 运行最小化测试..."
        cjpm test --filter MinimalDiagnosticTest
        
        echo "2/3 运行内存测试..."
        cjpm test --filter MemoryDiagnosticTest
        
        echo "3/3 运行GC测试..."
        cjpm test --filter GCFriendlyTest
        
        echo "✅ 分批测试完成"
        ;;
    *)
        echo "用法: $0 [minimal|memory|gc|batch|all]"
        echo ""
        echo "测试选项:"
        echo "  minimal - 最小化测试（推荐，最安全）"
        echo "  memory  - 内存测试"
        echo "  gc      - GC测试"
        echo "  batch   - 分批测试（推荐，避免GC问题）"
        echo "  all     - 完整测试（可能卡住）"
        echo ""
        echo "示例:"
        echo "  $0 minimal  # 快速验证"
        echo "  $0 batch    # 完整但安全的测试"
        ;;
esac
EOF

chmod +x scripts/safe_test.sh
echo "✅ 2. 创建安全测试执行器 (scripts/safe_test.sh)"

# 3. 创建问题诊断工具
cat > scripts/diagnose.sh << 'EOF'
#!/bin/bash
# 问题诊断工具

echo "🔍 Yao Framework 问题诊断"
echo "========================"

cd "$(dirname "$0")/.."

echo "📊 系统信息:"
echo "  操作系统: $(uname -s)"
echo "  架构: $(uname -m)"
echo "  当前目录: $(pwd)"

echo ""
echo "📁 项目结构检查:"
echo "  源码目录: $([ -d src ] && echo "✅ 存在" || echo "❌ 不存在")"
echo "  测试目录: $([ -d src/tests ] && echo "✅ 存在" || echo "❌ 不存在")"
echo "  配置文件: $([ -f cjpm.toml ] && echo "✅ 存在" || echo "❌ 不存在")"

echo ""
echo "🧪 测试文件检查:"
echo "  最小化测试: $([ -f src/tests/minimal_diagnostic_test.cj ] && echo "✅ 存在" || echo "❌ 不存在")"
echo "  测试工具: $([ -f src/tests/utils/simple_test_utils.cj ] && echo "✅ 存在" || echo "❌ 不存在")"

echo ""
echo "🔧 构建测试:"
if cjpm build > /dev/null 2>&1; then
    echo "  构建状态: ✅ 成功"
else
    echo "  构建状态: ❌ 失败"
    echo "  建议: 运行 'cjpm build' 查看详细错误"
fi

echo ""
echo "💡 修复建议:"
echo "  1. 使用 './scripts/safe_test.sh minimal' 进行快速测试"
echo "  2. 使用 './scripts/safe_test.sh batch' 进行完整测试"
echo "  3. 如果仍有问题，检查系统资源使用情况"
echo "  4. 考虑重启终端或系统"
EOF

chmod +x scripts/diagnose.sh
echo "✅ 3. 创建问题诊断工具 (scripts/diagnose.sh)"

# 4. 更新项目文档
cat >> README.md << 'EOF'

## 🔧 测试问题修复

如果遇到 `cjpm test` 卡住的问题，请使用以下修复方案：

### 快速修复
```bash
# 运行安全的最小化测试
./scripts/safe_test.sh minimal

# 运行完整的分批测试
./scripts/safe_test.sh batch
```

### 问题诊断
```bash
# 运行诊断工具
./scripts/diagnose.sh
```

### 手动修复
```bash
# 加载GC优化配置
source .env.gc

# 运行测试
cjpm test --filter MinimalDiagnosticTest
```

详细信息请参考 `docs/test_diagnosis_report.md`
EOF

echo "✅ 4. 更新项目文档 (README.md)"

echo ""
echo "🎉 修复方案部署完成！"
echo "====================="
echo ""
echo "📝 使用指南:"
echo "  1. 快速验证: ./scripts/safe_test.sh minimal"
echo "  2. 完整测试: ./scripts/safe_test.sh batch"
echo "  3. 问题诊断: ./scripts/diagnose.sh"
echo ""
echo "📊 修复效果:"
echo "  - ✅ GC参数优化"
echo "  - ✅ 安全测试策略"
echo "  - ✅ 问题诊断工具"
echo "  - ✅ 文档更新"
echo ""
echo "💡 如果问题仍然存在:"
echo "  1. 检查系统资源使用情况"
echo "  2. 尝试重启终端"
echo "  3. 考虑使用更保守的GC参数"
echo "  4. 查看 docs/test_diagnosis_report.md 获取详细信息"
